package com.example.synccenter.controller;

import com.example.synccenter.identitysource.registry.IdentitySourceBeanRegistry;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.Map;

/**
 * 身份源事件回调端点，接收外部系统推送的同步事件并分发给对应身份源。
 */
@Slf4j
@RestController
@RequestMapping("/api/sync")
public class IdentitySourceEventController {
    /** 身份源Bean注册表 */
    private final IdentitySourceBeanRegistry beanRegistry;

    /**
     * 构造方法
     * @param beanRegistry 身份源Bean注册表
     */
    public IdentitySourceEventController(IdentitySourceBeanRegistry beanRegistry) {
        this.beanRegistry = beanRegistry;
    }

    /**
     * 接收同步事件回调（POST）
     * @param code 身份源ID
     * @param body 事件数据
     * @return 处理结果
     */
    @PostMapping("/{code}")
    public Map<String, Object> receive(@PathVariable String code, @RequestBody(required = false) Map<String, Object> body) {
        var identitySource = beanRegistry.getIdentitySource(code);
        if (identitySource != null) {
            log.info("身份源 [" + code + "] 收到事件");
            return (Map<String, Object>) identitySource.event(body != null ? body : Map.of());
        }
        return Map.of("status", "error", "message", "身份源不存在");
    }
} 